diff -ru herrie-2.1-orig/herrie-2.1/src/gui_input.c herrie-2.1-signals/herrie-2.1/src/gui_input.c
--- herrie-2.1-orig/herrie-2.1/src/gui_input.c	2008-07-15 10:59:07.000000000 -0500
+++ herrie-2.1-signals/herrie-2.1/src/gui_input.c	2008-07-18 09:44:41.000000000 -0500
@@ -521,6 +521,9 @@
 	sigset_t sset;
 
 	sigemptyset(&sset);
+	sigaddset(&sset, SIGRTMIN+1);
+	sigaddset(&sset, SIGRTMIN+2);
+	sigaddset(&sset, SIGRTMIN+3);
 	sigaddset(&sset, SIGUSR1);
 	sigaddset(&sset, SIGUSR2);
 	sigaddset(&sset, SIGHUP);
@@ -545,20 +548,29 @@
 	if (shutting_down)
 		return;
 
-	switch (signal) {
-	case SIGUSR1:
-		playq_cursong_pause();
-		break;
-	case SIGUSR2:
-		playq_cursong_next();
-		break;
-	case SIGHUP:
-	case SIGINT:
-	case SIGPIPE:
-	case SIGQUIT:
-	case SIGTERM:
-		gui_input_quit();
-		g_assert_not_reached();
+	if (signal == (SIGRTMIN+1)) { gui_playq_song_select(); }
+	else {
+		if (signal == (SIGRTMIN+2)) { playq_cursong_stop(); }
+		else {
+			if (signal == (SIGRTMIN+3)) { playq_cursong_prev(); }
+			else {
+				switch (signal) {
+				case SIGUSR1:
+					playq_cursong_pause();
+					break;
+				case SIGUSR2:
+					playq_cursong_next();
+					break;
+				case SIGHUP:
+				case SIGINT:
+				case SIGPIPE:
+				case SIGQUIT:
+				case SIGTERM:
+					gui_input_quit();
+					g_assert_not_reached();
+				}
+			}
+		}
 	}
 }
 #endif /* G_OS_UNIX */
@@ -570,6 +582,9 @@
 	unsigned int i;
 
 #ifdef G_OS_UNIX
+	signal(SIGRTMIN+1, gui_input_sighandler);
+	signal(SIGRTMIN+2, gui_input_sighandler);
+	signal(SIGRTMIN+3, gui_input_sighandler);
 	signal(SIGUSR1, gui_input_sighandler);
 	signal(SIGUSR2, gui_input_sighandler);
 	signal(SIGHUP, gui_input_sighandler);
